پروژه دانشجویی رایگان C++: دفترچه تلفن
.
اطلاعات کاربری
درباره ما
دوستان
خبرنامه
آخرین مطالب
لینکستان
دیگر موارد
آمار وب سایت

#include
#include
#include
#include
#include
#include

 

struct Phone
{
    char name[15];
    char family[15];
    char tel[12];

    Phone *next;
};

Phone* Start_ptr = NULL;
Phone* current = NULL;

void Select ( int ); // which choice user selected;
void Add_new();
void Print_all();
void Menu1();
void Menu2();
void Edit_current();

void Delete_current ();
void Delete_all();
void Tel_or_name( int );
void Read_from_file();
void Write_to_file();

void Sort_name( int );
void Add_tail_from_file( Phone* );

Phone* Search( char* , int);


enum MENU{ ADD=1, SEARCH_NAME, SEARCH_NO, SORT_NAME, SORT_FAMIL, SHOW_ALL, SAVE, EXPORT_CSV, EXIT, UNINSTALL };

int main()
{
    Read_from_file();

    int choice;

    do
    {
        Menu1();
        cin >> choice;
        clrscr();
        Select ( choice );

    }while ( choice != EXIT );

    Write_to_file();

    cout <<"Thank you" << endl;
    Delete_all();

    return 0;
}

/*===================Select=======================*/
void Select( int choose )
{
    switch ( choose )
    {
    case ADD :
        Add_new();      break;
       
    case SEARCH_NAME :
        Tel_or_name(1); break;
       
    case SEARCH_NO :
        Tel_or_name(2); break;
       
    case SORT_NAME :
        Sort_name(1);   break;

    case SORT_FAMIL :
        Sort_name(2);   break;
       
    case SHOW_ALL :
        Print_all();    break;

    case SAVE :
        Write_to_file();
        cout <<"We will save your data automatically when your work finished" << endl;
        getch();
        break;

 

    case EXIT :
        return;

   

    default :
        cout <<"Select again :" << endl;
    }
    return;
}
/*=================Add_new=====================*/
void Add_new()
{
    Phone* temp = new Phone;
    Phone* temp2 = Start_ptr;
   
    clrscr();
   
    cout << "Enter the name : ";
    cin >> temp->name;
    cout << "Family : ";
    cin >> temp->family;
    cout << "Phone number : ";
    cin >> temp->tel;
   
    temp->next = NULL;
   
    if ( Start_ptr == NULL )
    {
        Start_ptr = temp;       
    }
   
    else
    {
        while( temp2->next != NULL )
        {
            temp2 = temp2->next;
        }
        temp2->next = temp;
    }
   
    return;
}
/*==============Print_all=======================*/
void Print_all()
{
    Phone* temp = Start_ptr;
    char show[35];

    if ( Start_ptr == NULL )
    {
        cout <<"The list is empty!" << endl;
        getch();
        return;
    }
    else
    {
        cout<<"\nName     famil                       Phone       "
            <<"\n-------------------------------   ------------" << endl;
        do
        {
            strcpy(show, "");
            strcat(show, temp->family);
            strcat(show, ", ");
            strcat(show, temp->name);
            show[0] = toupper(show[0]);
            cout << setiosflags( ios::left )
                << setw(36) << show << setw(12) <tel <

            temp = temp->next;
        }while(temp != NULL);
    }
    cout << endl;
    getch();
    return;
}

/*=================Search=======================*/
Phone* Search( char* temp_search , int choice )
{
    /* If list is empty */
    if ( Start_ptr == NULL )
    {
        cout <<"List is empty!" << endl;
        return NULL;
    }

    /* Search by name */
    if ( choice == 1 )
    {
        while( current != NULL && strcmp( current->name, temp_search ) != 0 )
        {
            current = current->next;
        }
    }

    /* Search by tel */
    if ( choice == 2 )
    {
        while( current != NULL && strcmp( current->tel, temp_search ) != 0 )
        {
            current = current->next;
        }
       
    }

    /* If record found */
    if ( current != NULL )
    {
        cout << "Record found" << endl
            << current->name << " " << current->family << " : " << current->tel << endl;
       
        return current;
    }

    /* If record !found */
    else
    {
        cout <<"Record NOT found" << endl;
        current = Start_ptr; //move back the current pointer to fisrt node
        return NULL;
    }
}

/*====================Delete_current====================*/
void Delete_current()
{
    Phone* temp = NULL;
    Phone* prev = NULL;

    /* If it`s the fisrt node */
    if ( current == Start_ptr )
    {
        temp = Start_ptr;
        Start_ptr = Start_ptr->next; //If we have only 1 node, start_ptr will point to NULL
        delete temp;
        temp = NULL;
    }

    /* If it`s in the middle of list or the last node */
    else   
    {
        prev = Start_ptr;
        while( prev->next != current )
        {
            prev = prev->next;
        }
        prev->next = current->next;// If it`s the last node prev will point to NULL
        delete current;
        current = Start_ptr;
    }           
}

/*=================Delete_all=================*/
void Delete_all()
{
    if ( Start_ptr == NULL )
    {
        return; // we have no memory allocated
    }

    Phone* temp = Start_ptr;
    while( Start_ptr != NULL )
    {
        temp = Start_ptr;
        Start_ptr = Start_ptr->next;
        delete temp;
    }
}

/*=================Tel_or_name================*/
void Tel_or_name(int choose)
{
    Phone* temp_del = NULL;
    char temp_search[15];
    int choice;
   
    current = Start_ptr;
       
    cout <<"Enter the "<<(choose == 1 ? "name" : "tel") <<" to search : ";
    cin >> temp_search;
       
    temp_del = Search( temp_search, choose );
       
    while ( temp_del != NULL )
    {
        Menu2();
        cin >> choice;
           
        switch( choice )
        {
        case 1: current = current->next; temp_del = Search( temp_search, choose ); break;
        case 2: Delete_current(); break;
        case 3: Edit_current();   break;
        case 4: return;
        }
    }
    getch();
   
}
/*==============Write_to_file=============================*/
void Write_to_file()
{
    Phone* temp = Start_ptr;
    ofstream outFile("Data.dat" , ios::out );
   
    if( !outFile )
    {
        cerr << "Some error ocured during writing to file." << endl;
        getch();
        return;
    }
   
    while( temp != NULL )
    {
        outFile << temp->name << " " << temp->family << " " << temp->tel;
        if( temp->next != NULL )
        {
            outFile << endl;
        }
        temp = temp->next;
       
    }

    outFile.close();

    cout <<"Data saved successfully." << endl;
}
/*===============Read_from_file=============================*/
void Read_from_file()
{
    ifstream inputFile("Data.dat" , ios::in );
   
    if ( !inputFile )
    {
        cout << "Data couldn`t be loaded." << endl;
        getch();
        return;
    }

    do
    {
        Phone* temp = new Phone;
       
        inputFile >> temp->name;
        inputFile >> temp->family;
        inputFile >> temp->tel;
        temp->next = NULL;
       
        Add_tail_from_file( temp );

        //Where should I place delete temp?????   
    }while( !inputFile.eof() );

    cout <<"Data loaded successfully" << endl;
}

/*==============Add_tail_from_file=================*/
void Add_tail_from_file( Phone* temp )
{
   
    if ( Start_ptr == NULL )
    {
        Start_ptr = temp;   
    }
    else
    {
        Phone* temp2 = Start_ptr;
        while ( temp2->next != NULL )
        {
            temp2 = temp2->next;
        }
        temp2->next = temp;
    }
}

/*================Sort_name=================================*/

void Sort_name(int choice)
{
    /* If list is empty */
    if ( Start_ptr == NULL )
    {
        cout <<"The list is empty!" << endl;
        getch();                                     
        return;
    }
   
    /* Determine the size of list */
    int counter = 1;
    Phone* temp = Start_ptr;
   
    while( temp->next != NULL )
    {
        temp = temp->next;
        counter++;
    }
   
    /* an Array of pointers to struct Phone. I couldn`t do this part by dynamic memory
    allocation i.e Phone* sort = new Phone[counter]
    or some thing like that. if you could help, please send me your suggestion .*/
    Phone* sort[1000];

    sort[0] = Start_ptr;
    for ( int cnt = 1; cnt < counter; cnt++ )
    {
        sort[cnt] = sort[cnt-1]->next;
    }
    sort[counter] = NULL;
   
    /* bubble sort */
    /* This part could be better too.for example if user enter capital 'F' it comes
       before 'a'. I had to change all letter to lower case but has no time. */
   
    for ( int i = 0; i < counter; i++ )
    {
        for ( int j = 0; j < counter - i - 1; j++)
        {
            /* Sort by name */
            if ( choice == 1 )
            {
                if ( strcmp(sort[j]->name, sort[j+1]->name) > 0 )
                {
                    Phone* temp2 = sort[j];
                    sort[j] = sort[j+1];
                    sort[j+1] = temp2;
                }
            }

            /* Sort by family */
            else
            {
                if ( strcmp(sort[j]->family, sort[j+1]->family) > 0 )
                {
                    Phone* temp2 = sort[j];
                    sort[j] = sort[j+1];
                    sort[j+1] = temp2;
                }
            }
        }
    }
   
    /* Showing sorted list */   
    char show[35];
    int index= 0;
   
    cout<<"\nName                                Phone       "
        <<"\n----------------------------------- ------------" << endl;
    do
    {
        strcpy(show, "");
        strcat(show, sort[index]->family);
        strcat(show, ", ");
        strcat(show, sort[index]->name);
        show[0] = toupper(show[0]);
        cout << setiosflags( ios::left )
            << setw(36) << show << setw(12) <tel <        
    }while(sort[++index] != NULL);
   
    cout << endl;
    getch();
    return;
}
/*====================Menu1=======================*/
void Menu1()
{
    clrscr();
        cout << "1).  Add new phone"
            <<"\n2).  Search for name"
            <<"\n3).  Search for number"
            <<"\n4).  Sort by name"
            <<"\n5).  Sort by family"
            <<"\n6).  Show all list"
            <<"\n7).  Save data"
            <<"\n9).  Exit"
            <<"\n\nYour choice : ";
}

/*====================Menu2=======================*/
void Menu2()
{
    cout << "\n1.  Find next"
        <<"\n2.  Delete current person"
        <<"\n3.  Edit current person"
        <<"\n4.  continue" << endl
        <<"\nYour choice : ";
}


void Edit_current()
{
    strcpy(current->name,"");
    strcpy(current->family,"");

    cout << "Enter the name : ";
    cin >> current->name;
    cout << "Family : ";
    cin >> current->family;
    cout << "Phone number : ";
    cin >> current->tel;

    clrscr();
}
/*====================End=========================*/
 




:: موضوعات مرتبط: برنامه نویسی , ,
:: برچسب‌ها: برنامه سازی c++ , برنامه دفترچه تلفن , notephone ,
:: بازدید از این مطلب : 677
|
امتیاز مطلب : 32
|
تعداد امتیازدهندگان : 8
|
مجموع امتیاز : 8
ن : حسن کریمی و رامین بیات
ت : پنج شنبه 19 آبان 1390
.
مطالب مرتبط با این پست
می توانید دیدگاه خود را بنویسید


نام
آدرس ایمیل
وب سایت/بلاگ
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

آپلود عکس دلخواه:








موضوعات
نویسندگان
آرشیو مطالب
مطالب تصادفی
مطالب پربازدید
چت باکس
تبادل لینک هوشمند
پشتیبانی